package filter;



import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *  非法拦截资源
 *      拦截的资源：拦截所有资源 （/*）
 *     需要放行的资源
 *     1.放行指定页面（无需等率即可访问的页面 例如：登录、注册页面等）
 *     2.放行静态文件资源
 *     3.指定操作放行（无需登录即可执行的操作 例如：登录、注册页面等）
 *     4.登录状态、放行 （判断session中用户是否为空）
 *
 */
@WebFilter("/*")//拦截路径
public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       //基于http请求
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        //获取请求路径
        String url = request.getRequestURI();

        //1.放行指定页面（无需登录即可访问的页面 例如：登录、注册页面等）
        if (url.contains("/login.jsp")||(url.contains("/register.jsp"))){
            //放行资源
            filterChain.doFilter(servletRequest,servletResponse);
            return;
        }
        //2.放行静态文件资源 如(/js)、(/images)
        if (url.contains("/js")||url.contains("/images")||url.contains("/css")){
            //放行资源
            filterChain.doFilter(servletRequest,servletResponse);
            return;
        }
        // 3.指定操作放行（无需登录即可执行的操作 例如：登录、注册页面等）
        if (url.contains("login")||url.contains("register")){
            //放行资源
            filterChain.doFilter(request,response);
            return;
        }
        //放行验证码
        if (url.contains("validateCode")){
            filterChain.doFilter(request,response);
        }
        //4.登录状态、放行（判断session中用户是否为空）
        String uName = (String) request.getSession().getAttribute("userName");
        if (uName !=null){
            //放行资源
            filterChain.doFilter(request,response);
        }else {
            //当用户未登录是，拦截请求跳转到登录首页
            response.sendRedirect("login.jsp");
        }





    }

    @Override
    public void destroy() {

    }
}
